package com.splic.product.service;

import com.splic.product.domain.User;
import com.splic.product.dto.*;

import java.util.List;
import java.util.Set;

/**
 * 用户信息Service接口
 * 
 * @author singe
 * @date 2022-01-04
 */
public interface UserService
{
    /**
     * 查询用户信息
     * 
     * @param id 用户信息主键
     * @return 用户信息
     */
    public User selectUserById(Long id);


    /**
     * 查询用户信息列表
     *
     * @param user 用户信息
     * @return 用户信息集合
     */
    public List<User> selectPageList(User user);


    /**
     * 查询用户信息列表
     * 
     * @param user 用户信息
     * @return 用户信息集合
     */
    public List<User> selectUserList(User user);

    /**
     * 新增用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int insert(User user);

    /**
     * 修改用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int update(User user);

    /**
     * 删除用户信息信息
     * 
     * @param id 用户信息主键
     * @return 结果
     */
    public int deleteById(Long id);

    /**
     * 新增或修改用户信息
     *
     * @param user 用户信息信息
     * @return 结果
     */
    public int saveOrUpdate(User user);
    /**
     * 查询
     *
     * @return 结果
     */
    public User getByAccount(String account);
    /**
     * 查询
     *
     * @return 结果
     */
    public User getByEmail(String email);

    Long register(RegisterDto registerDto);

    User login(LoginDto loginDto);

    User mobielLogin(String token, String phoneNumber, Integer isForce);

    void verification(String account);

    /**
     * 修改用户信息
     * @param user
     * @return
     */
    void updateUserInfo(User user);

    Boolean updateUserPwd(Long userId, UpdatePwdDto updatePwdDto);

    User getByThirdUserId(String unionId);

    User getByUserIdentify(String userIdentify);

    void resetUserPwd(ResetPwdDto resetPwdDto);

    User getUserByVague(String accountOrEmail);

    List<User> getByIds(Set<Long> userIdSet);

    void logOutAccount(Long userId,String password,String reason);

    List<UserBackUpDto> selectLogOutPageList(User user);

    User selectLogoutUserById(Long valueOf);

    Boolean updateAccount(UpdateAccountDto updateAccountDto);

    Boolean updateUserEmail(UpdateEmailDto updateEmailDto);
}
